#include<iostream>
#include<vector>
/*
将一个按照升序排列的有序数组，转换为一棵高度平衡二叉搜索树。

本题中，一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

示例:

给定有序数组: [-10,-3,0,5,9],

一个可能的答案是：[0,-3,9,-10,null,5]，它可以表示下面这个高度平衡二叉搜索树：

      0
     / \
   -3   9
   /   /
 -10  5

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/
using namespace std;

struct TreeNode {
	int val;
	TreeNode* left;
	TreeNode* right;
	TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

class Solution {
public:
	TreeNode* sortedArrayToBST(vector<int>& nums) {
		if (nums.empty()) return NULL;
		int mid_idx = nums.size() / 2;
		TreeNode* root = new TreeNode(nums[mid_idx]);
		vector<int> left(nums.begin(), nums.begin() + mid_idx);
		root->left = sortedArrayToBST(left);
		vector<int> right(nums.begin() + mid_idx + 1,nums.end());
		root->right = sortedArrayToBST(right);
		return root;
	}
};
int main() {
	vector<int> nums = { -10,-3,0,5,9 };
	Solution so;
	auto ans = so.sortedArrayToBST(nums);
	return 0;
}